﻿//-----------------------------------------------------------------------
// <copyright file="MeaStrategy.cs" company="tuliprules.org">
//     Copyright (c) 2010 tuplelister, tuliprules.org.
// </copyright>
// <summary>This is the MeaStrategy class.</summary>
//-----------------------------------------------------------------------

namespace Tulip.Engine.ConflictResolution
{
    /// <summary>
    /// Means Ends Analysis conflict resolution strategy.
    /// </summary>
    /// <remarks>
    /// <para>Among productions of the same salience, newly activated productions are placed using the 
    /// OPS5 strategy of the same name. First the time tag of the pattern entity associated with 
    /// the first pattern is used to determine where to place the activation. An activation 
    /// thats first pattern's time tag is greater than another activations first pattern's time 
    /// tag is placed before the other activation on the agenda. If both activations have the 
    /// same time tag associated with the first pattern, then the LEX strategy is used to 
    /// determine placement of the activation. Again, as with the CLIPS LEX strategy, negated 
    /// patterns have pseudo time tags.</para>
    /// <para>Example:  Consider the following scenario:</para>
    /// <para>          The following six activations have been listed in their MEA ordering (where 
    ///           the comma at the end of the activation indicates the presence of a negated 
    ///           pattern).</para> 
    /// <para>          rule-2: f-3,f-1
    ///           rule-3: f-2,f-1
    ///           rule-6: f-1,f-4
    ///           rule-5: f-1,f-2,f-3,
    ///           rule-1: f-1,f-2,f-3
    ///           rule-4: f-1,f-2,</para>
    /// </remarks>
    public class MeaStrategy : ConflictResolutionStrategy
    {
        /// <summary>
        /// Factory method returns a new agenda.
        /// </summary>
        /// <returns>A new agenda.</returns>
        public override Agenda NewAgenda()
        {
            // TODO: return agenda here
            return null;
        }

        /// <summary>
        /// Factory method creates a new agenda list.
        /// </summary>
        /// <returns>A new agenda list.</returns>
        public override IAgendaList CreateAgendaList()
        {
            return null;
        }
    }
}
